/********************************Copyright (c)**********************************\
**
**                   (c) Copyright 2024, Main, China, QD.
**                           All Rights Reserved
**
**                           By(青岛世新科技有限公司)
**                           http://www.qdsxkj.com
**
**----------------------------------文件信息------------------------------------
** 文件名称: App_Display.c
** 创建人员:  Zhai
** 创建日期: 2024-03-12
** 文档描述: 
**
**----------------------------------版本信息------------------------------------
** 版本代号: V0.1
** 版本说明: 初始版本
**
**------------------------------------------------------------------------------
\********************************End of Head************************************/
 
/********************************End of File************************************/
/******************************************************************************
** 公司名称：天津柯迪斯科技有限公司
** 版权信息：
** 文件名称： App_Display.c
** 模块名称： KD716-AT32F415CBT7显示模块
** 版 本 号： V1.0
** 作    者： 蒲磊
** 
** 修改记录： 版本     修改人      时间         修改内容
**
******************************************************************************/
 
/******************************************************************************
* 头文件
******************************************************************************/
#include "App_Display.h"
#include "App_MainTask.h"
/******************************************************************************
*宏定义 ('#define')                             
******************************************************************************/
 
/******************************************************************************
*类型定义 ('typedef')                                         
******************************************************************************/

/******************************************************************************
*函数声明 ('static')
******************************************************************************/
extern uint8_t     gucVoltage_Calibration;      /*电压校准标志*/
extern uint16_t	   gusThermocoupleRes; 
/******************************************************************************
* 全局变量定义 
******************************************************************************/

extern uint8_t      gucRefreshFlag;
uint16_t            gusSetTemperature = 50;/*设定的温度值*/
En_StateResponse    lucHeatState = State_CloseScreen; 
/*****************************************************************************
* 函数实现 - global ('extern') and local ('static')
******************************************************************************/
 
/******************************************************************************
** 功  能：息屏界面
** 参  数：无
** 返回值：无
** 备  注：
******************************************************************************/
En_FunResponse xDisp_RunPage(void)
{
    uint32_t                    lulTicks;
    uint32_t                    lulOvertimeReturnTicks;    
    muilt_cyc_fifo_error_code_t lxState;
    uint16_t                    lxActualReadLen;
    uint16_t                    lusCurrentTemperature;  
    uint8_t                     lucKeyValue;
    uint8_t                     lucDisInfoChangeFlg = 0;
    En_StateResponse            lucLastHeatState = State_CloseScreen;     
    while(1)
    {
        if(lucLastHeatState != lucHeatState)
        {
            lucLastHeatState = lucHeatState;
            lulOvertimeReturnTicks = ulBsp_Getticks();            
        }
        switch(lucHeatState)
        {
            case State_CloseScreen:      
            {          
                lulTicks = ulBsp_Getticks();                 
                LED1_OFF;/*设定水温灯*/
                LED2_OFF;/*实际水温灯*/
                LED3_ON; /*电源灯*/
                RELAY_OFF;/*加热继电器*/ 
                vBsp_LCD_DispNum(0,0,ucBsp_GetSEGRefreshFlag());                
                break;                   
            }
            case State_HomeScreen:
            {
                LED1_OFF;/*设定水温灯*/
                LED2_ON; /*实际水温灯*/
                LED3_ON; /*电源灯*/ 
                RELAY_OFF;/*加热继电器*/  
                if(ulBsp_Getticks() -lulOvertimeReturnTicks > 60000)/*60s 无操作息屏*/
                {
                    lucHeatState = State_CloseScreen;  
                }                 
                vBsp_LCD_DispNum(ulGet_Current_Temperature(gusThermocoupleRes)/10,1,ucBsp_GetSEGRefreshFlag());
                break;
            }       
            case State_AdjustScreen:
            {
                LED1_ON;/*设定水温灯*/
                LED2_OFF; /*实际水温灯*/
                LED3_ON;  /*电源灯*/
                RELAY_OFF;/*加热继电器*/   
                if(ulBsp_Getticks() -lulOvertimeReturnTicks > 10000)/*10s 无操作返回主界面*/
                {
                    lucHeatState = State_HomeScreen;  
                }                
                vBsp_LCD_DispNum(gusSetTemperature,ucBsp_GetFlashFlag(),ucBsp_GetSEGRefreshFlag());/*设定温度值闪烁*/            
                break;
            } 
            case State_HeatScreen:
            {
                lusCurrentTemperature = ulGet_Current_Temperature(gusThermocoupleRes)/10;
                
                LED3_ON;  /*电源灯*/
                
                if(lusCurrentTemperature < gusSetTemperature)
                {
                    RELAY_ON;/*加热继电器*/
                }
                else
                {
                    if(ulBsp_Getticks() -lulOvertimeReturnTicks > 1000)/*这儿做一个1s延时，防止在温度高的情况下按加热按键无反应*/
                    {
                        lucHeatState = State_HomeScreen; /*升高到固定温度后，停止加热，跳转到主页面*/
                    }
                }
 
                if(ulBsp_Getticks() - lulTicks > 2000)
                {
                    lulTicks = ulBsp_Getticks();
                    lucDisInfoChangeFlg = lucDisInfoChangeFlg == 0 ? 1 : 0;                                        
                }
                if(0 == lucDisInfoChangeFlg)
                {
                    LED1_ON;/*设定水温灯*/
                    LED2_OFF; /*实际水温灯*/                     
                    vBsp_LCD_DispNum(gusSetTemperature,1,ucBsp_GetSEGRefreshFlag());/*设定温度值闪烁*/ 
                }
                else
                {
                    LED1_OFF;/*设定水温灯*/
                    LED2_ON; /*实际水温灯*/                        
                    vBsp_LCD_DispNum(lusCurrentTemperature,1,ucBsp_GetSEGRefreshFlag());/*设定温度值闪烁*/ 
                }                  
                break;
            }
            case State_ErrorScreen:
            {
            
            
                break;
            }
            case State_WifiScreen:
            {
            
            
                break;
            }
        }
      

        /*从按键缓存中读取键值，并根据键值执行相应的动作*/
        MCF_ReadDataFromFifo(KEY_FIFO_ID,1,(uint8_t *)&lucKeyValue,&lxActualReadLen,&lxState);/*从队列中取出一组键值*/
        if(lxActualReadLen == 1 && lxState == kMultiCycFiFo_Error_NONE)
        {
            lulOvertimeReturnTicks = ulBsp_Getticks();   /*按键超时刷新*/
            switch(lucKeyValue)
            {
                case BUTTON_UP_RELEASE:     /*加键释放*/
                {
                    switch(lucHeatState)
                    {
                        case State_HomeScreen:
                        {                        
                            lucHeatState = State_AdjustScreen;
                            break;
                        }       
                        case State_AdjustScreen:
                        {
                            if(gusSetTemperature < 60)
                            {
                                gusSetTemperature++;
                            }
                            break;
                        } 
                        case State_HeatScreen:
                        {
                                                
                            break;
                        }
                        case State_ErrorScreen:
                        {
                        
                        
                            break;
                        }
                        case State_WifiScreen:
                        {
                        
                        
                            break;
                        }
                        default :
                        {
                            
                            break;  
                        }                        
                    }
                          
                    break;
                }
                case BUTTON_DOWN_RELEASE:    /*减键释放*/
                {
                    switch(lucHeatState)
                    {
 
                        case State_HomeScreen:
                        {                       
                            lucHeatState = State_AdjustScreen;                        
                            break;
                        }       
                        case State_AdjustScreen:
                        {
                            if(gusSetTemperature > 30)
                            {
                                gusSetTemperature--;
                            }
                            break;
                        } 
                        case State_HeatScreen:
                        {

                            break;
                        }
                        case State_ErrorScreen:
                        {
                        
                        
                            break;
                        }
                        case State_WifiScreen:
                        {
                        
                        
                            break;
                        }
                        default :
                        {
                            
                            break;  
                        }                        
                    }
                                          
                    break;
                }
                case BUTTON_MODE_RELEASE:   /*加热键释放*/
                {
                    switch(lucHeatState)
                    { 
                        case State_HomeScreen:
                        case State_AdjustScreen:
                        {                        
                            lucHeatState = State_HeatScreen;
                            break;
                        } 
                        case State_HeatScreen:
                        {
                            lucHeatState = State_HomeScreen;
                            break;
                        }
                        case State_ErrorScreen:
                        {
                        
                        
                            break;
                        }
                        case State_WifiScreen:
                        {
                        
                        
                            break;
                        }
                        default :
                        {
                            
                            break;  
                        }                        
                    }
                                          
                    break;
                }
                case BUTTON_POWER_RELEASE:   /*Power键释放*/
                {
                    switch(lucHeatState)
                    {
                        case State_CloseScreen:      
                        {                            
                            lucHeatState =  State_HomeScreen;  
                            gusThermocoupleRes = ulVoltage_Smoothing(ADC_Get_ADC_Channel_Value(ADC_TEMPERATURE_CHAANEL),1);                            
                            break;                   
                        }
                        default :
                        {
                            lucHeatState =  State_CloseScreen;                              
                            break;  
                        }
                    }
                                          
                    return Page_HomeScreen;              
                }    
 
            }
        }
    }
}
